
/**
 * 算法模块类
 * @author 神兽白泽
 * @description 交流群：415468592
 */
export default class MathMgr {
    /**
    * 获取不重复的随机数
    * @param minValue 最小值
    * @param maxValue 最大值
    * @param valueNum 随机个数
    */
    public static getRandomValueDif(minValue: number, maxValue: number, valueNum: number) {
        // 全部随机数值
        let allNums = new Array;

        // 判断获取随机数个数
        let size = valueNum ? (valueNum > maxValue - minValue + 1 ? maxValue - minValue + 1 : valueNum) : 1;

        // 生成随机数值区间数组
        for (let i = minValue, k = 0; i <= maxValue; i++, k++) {
            allNums[k] = i;
        }

        let arr = []

        // 随机从数组里面取值
        allNums.sort(function () { return 0.5 - Math.random(); });
        for (let j = 0; j < size; j++) {
            let index = Math.floor(Math.random() * allNums.length);
            arr.push(allNums[index]);
            let tmp = allNums[index];
            allNums[index] = allNums[allNums.length - 1];
            allNums[allNums.length - 1] = tmp;
            allNums.pop();
        }

        return arr;
    }
    /**
    * 获取范围内的随机数
    * @param minValue 最小值
    * @param maxValue 最大值
    */
    public static getRangeRandom(minValue, maxValue) {
        // 获取数组从第一个开始到指定个数的下标区间
        return this.getRandomValueDif(minValue, maxValue, 1)[0];
    }
    /**
    * 获取范围内的随机整数
    * @param min
    * @param max
    * @returns
    */
    public static getRandomInt(min: number, max: number): number {
        if (min === max) return min;
        let int_num: any = Math.random() * (max - min + 1) + min
        let random = parseInt(int_num);
        return random;
    }
    /**
    * 打乱数组内数据
    * var arr = ["a", "b", "c", "d", "e","f","g"];
    * console.log(shuffle(arr));
    * @param array 数组
    * @returns
    */
    public static shuffle<T>(array: Array<T>): Array<T> {
        if (!Array.isArray(array)) {
            return array;
        }
        for (var i = array.length - 1; i > 0; i--) {
            var j = Math.floor(Math.random() * (i + 1));
            [array[i], array[j]] = [array[j], array[i]]
        }
        return array;
    }
    /**
    * 将数组内容用字符串拼接
    * @param arr
    */
    public static getStrByArr(array): string {
        if (!Array.isArray(array)) {
            return array;
        }
        let str = "";
        for (let i = 0; i < array.length; i++) {
            if (i) str += ",";
            str += array[i];
        }
        return str;
    }
}